import type { Router } from 'vue-router'
import { useUserStore } from '@/stores/user'
import { message } from 'ant-design-vue'

export function setupRouterGuard(router: Router) {
  router.beforeEach(async (to, from, next) => {
    const userStore = useUserStore()
    const token = userStore.token
    
    // 设置页面标题
    document.title = (to.meta.title as string) || '高校文件收集系统'

    // 白名单路由直接放行
    if (['/login', '/404'].includes(to.path)) {
      if (token && to.path === '/login') {
        next('/dashboard')
      } else {
        next()
      }
      return
    }

    // 未登录跳转到登录页
    if (!token) {
      next(`/login?redirect=${to.path}`)
      return
    }

    try {
      // 如果没有用户信息，先获取用户信息
      if (!userStore.userInfo) {
        await userStore.getUserInfo()
      }

      // 检查路由是否需要特定角色
      if (to.meta.roles) {
        const userType = userStore.userInfo?.userType
        if (!userType || !(to.meta.roles as number[]).includes(userType)) {
          message.error('您没有权限访问该页面')
          next('/404')
          return
        }
      }

      next()
    } catch (error) {
      // 获取用户信息失败，可能是 token 过期
      message.error('登录已过期，请重新登录')
      userStore.logout()
      next(`/login?redirect=${to.path}`)
    }
  })
} 